package desgin.pattern.behavior.strategy;

/**
 * 
 * @Type Main
 * @Desc 赵云出场了，他根据诸葛亮给他的交代，依次拆开妙计
 * 
 * 
 *       1，策略模式有什么好处？ 策略模式的好处在于你可以动态的改变对象的行为。 <br/>
 *       2，设计原则 设计原则是把一个类中经常改变或者将来可能改变的部分提取出来<br/>
 *       ，作为一个接口（c++z中可以用虚类），然后在类中包含这个对象的实例，这样类的实例在运行时就可以随意调用实现了这个接口的类的行为
 *       。下面是一个例子。<br/>
 *       策略模式属于对象行为型模式，主要针对一组算法，将每一个算法封装到具有共同接口的独立的类中，从而使得它们可以相互替换。
 *       策略模式使得算法可以在不影响
 *       到客户端的情况下发生变化。通常，策略模式适用于当一个应用程序需要实现一种特定的服务或者功能，而且该程序有多种实现方式时使用。
 * @author Administrator
 * @date 2015年3月13日
 * @Version V1.0
 */
public class Main {
    public static void main(String[] args) {
        Context context;
        // 刚到吴国的时候拆开第一个
        System.out.println("----------刚刚到吴国的时候拆开第一个---------------");
        context = new Context(new BackDoor());
        context.operate();// 拆开执行
        System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n");

        // 当刘备乐不思蜀时，拆开第二个
        System.out.println("----------刘备乐不思蜀，拆第二个了---------------");
        context = new Context(new GivenGreenLight());
        context.operate();// 拆开执行
        System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n");

        // 孙权的小追兵了，咋办？拆开第三个锦囊
        System.out.println("----------孙权的小追兵了，咋办？拆开第三个锦囊---------------");
        context = new Context(new BlackEnemy());
        context.operate();// 拆开执行
        System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n");
    }
}
